﻿#ifndef _GAME_H
#define _GAME_H

#include <windows.h>
#include <d3d9.h>
#include <d3dx9.h>
#include <dinput.h>
#include "global.h"

class CGame
{
public:
	CGame(int CmdShow);
	
	~CGame();

	void GameInit();

	void GameRun(); 

	void GameEnd();

protected:
	int cmdShow;

	static LRESULT CALLBACK _WinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
	
	DWORD _DeltaTime; //Thời gian chuyển frame hình

	BYTE _KeyStates[256];

	DIDEVICEOBJECTDATA _KeyEvents[GL_KEY_BUFFER_SIZE];
	
	bool _InitWindow(int cmdShow); //Khởi tạo cửa sổ 
	
	bool _InitDirectX(); //Khởi tạo các đối tượng directX
	
	bool _InitInput(); //Khởi tạo đầu vào
	
	void _ProcessKeyboard(); //Tiến trình bàn phím (hỗ trợ nhận event của tất cả các phím cho đối tượng)

	void _RenderFrame(); //Vẽ hình lên cửa sổ

	int _IsKeyDown(int KeyCode); 

	
	virtual void RenderFrame(LPDIRECT3DDEVICE9 d3dDevice, int Delta); //Vẽ các thành phần con
	virtual void LoadResources(LPDIRECT3DDEVICE9 d3dDevice);
	virtual void ProcessInput(LPDIRECT3DDEVICE9 d3dDevice, int Delta);
	
	virtual void OnKeyDown(int KeyCode);
	virtual void OnKeyUp(int KeyCode);

	virtual void GameUpdate(int deltaTime);
};

#endif